package com.cougil.uoc.seghismed.business;

import java.util.List;
import java.util.Set;

import com.cougil.uoc.seghismed.model.Historial;
import com.cougil.uoc.seghismed.model.Metge;
import com.cougil.uoc.seghismed.model.Pacient;
import com.cougil.uoc.seghismed.model.Visita;

/**
 * Interfície que determina el conjunt de principals métodes de negoci l'aplicatiu Metge
 *
 * @author Ignacio Cougil Jares
 *
 */
public interface MetgeClientService extends CoreClientService {

	/**
	 * Afegeix la visita informada com una nova visita del pacient informat
	 *
	 * @param pacient
	 *            {@link Pacient} al qual es vol associar la nova visita
	 * @param visita
	 *            {@link Visita} a crear al pacient referit
	 */
	public void afegirVisita(Pacient pacient, Visita visita);

	/**
	 * Retorna l'historial del pacient informat (sempre que aquest formi part del grup de
	 * pacients asignats al metge)
	 *
	 * @return historial {@link Historial} amb totes les seves dades informades pel servidor
	 */
	public Historial consultarHistorial(Pacient pacient);

	/**
	 * Retorna el metge amb totes les seves dades informades
	 *
	 * @return metge {@link Metge} amb totes les seves dades informades pel servidor
	 */
	public Metge consultarMetge();

	/**
	 * Retorna el pacient amb totes les seves dades informades (sempre que aquest formi part del grup de
	 * pacients asignats al metge)
	 *
	 * @param pacient
	 *            {@link Pacient} a consultar
	 * @return pacient {@link Pacient} amb totes les seves dades informades pel servidor
	 */
	public Pacient consultarPacient(Pacient pacient);

	/**
	 * Retorna la llista dels pacients associats al metge connectat a l'aplicació
	 *
	 * @return llista {@link List} amb el conjunt de pacients associats al metge
	 */
	public List<Pacient> consultarPacients();

	/**
	 * Retorna la visita del pacient amb totes les seves dades informades
	 *
	 * @param pacient
	 *            {@link Pacient} del qual es vol consultar les dades de la seva visita
	 * @param visita
	 *            {@link Visita} a consultar
	 * @return visita {@link Visita} amb totes les seves dades informades pel servidor
	 */
	public Visita consultarVisita(Pacient pacient, Visita visita);


	/**
	 * Desxifra i retorna el conjunt de visites protegides de l'historial xifrat pel metge connectat
	 * a l'aplicació per poder visualitzar les seves dades correctament
	 *
	 * @param historial
	 *            {@link Historial} a desxifrar
	 * @return Set {@link Set} amb el conjunt de visites desxifrades
	 */
	public Set<Visita> desxifrarVisitesProtegides(Historial historial);

}
